package message

// TextBody 文本消息体。
type TextBody struct {
	Content string `json:"content"` // 消息内容
	IsAtAll bool   `json:"isAtAll"` // @所有人
	AtMobiles []string `json:"atMobiles"` // 被@人的手机号
}

// Text 文本消息。
type Text struct {
	Message
	TextBody *TextBody `json:"text"`
}

// NewText 创建一个新的文本消息实例。
func NewText() *Text {
	t := &Text{}
	t.SetType("text")
	return t
}

// SetContent 设置消息内容。
func (t *Text) SetContent(content string) *Text {
	if t.TextBody == nil {
		t.setDefaultTextBody()
	}
	t.TextBody.Content = content
	return t
}

// GetContent 获取消息内容。
func (t *Text) GetContent() string {
	if t.TextBody == nil {
		return ""
	}
	return t.TextBody.Content
}

// AppendLine 向消息内容追加一行。
func (t *Text) AppendLine(line string) {
	if t.TextBody == nil {
		t.setDefaultTextBody()
	}
	if t.TextBody.Content == "" {
		t.TextBody.Content = line
	} else {
		t.TextBody.Content += "\n" + line
	}
}

// setDefaultTextBody 设置默认文本消息体。
func (t *Text) setDefaultTextBody() *Text {
	t.TextBody = &TextBody{}
	return t
}

// SetIsAll 设置是否 @所有人。
func (t *Text) SetIsAll(isAll bool) *Text {
	if t.TextBody == nil {
		t.setDefaultTextBody()
	}
	t.TextBody.IsAtAll = isAll
	return t
}

// SetAtMobiles 设置被 @人的手机号列表。
func (t *Text) SetAtMobiles(mobiles []string) *Text {
	if t.TextBody == nil {
		t.setDefaultTextBody()
	}
	t.TextBody.AtMobiles = mobiles
	return t
}
